/**
 * @author 14544
 * @date 2020/4/1 16:50
 */
// 如何打乱数组顺序

// 使用洗牌算法
// 倒序循环这个数组
// 向下取范围从 0 到 n-1 的随机数 k
// k对应的item 与 n-1 对应的item 做交换
// 直到循环到数组的首个元素
{
    // 在数组的原型上定义一个方法
    Array.prototype.shuffle = function () {
        let array = this
        let len = array.length;  // 获取数组的长度
        while (len) {
            // 取得一个随机数，随机数的范围在指定的长度内(向下取整)如：0-10,0-9,0-8 ....
            let randomIndex = Math.floor(Math.random() * len);
            // 将获取到的随机数索引对应的值，与数组的最后一个值互相交换，这里使用ES6的解构赋值
            [array[randomIndex], array[len - 1]] = [array[len - 1], array[randomIndex]]
            // 将长度值减一，保证下次循环不会影响到最后一个值，因为最后一个值已经处理过了
            len--;
        }
        return array
    }

    let array1 = [1,2,3,4,5,6,7,8,9,10];
    console.log(array1.shuffle())
}